本章课程PDF,视频(油管B站)。

Review

Gradient Descent算法流程如下图:

流程可视化效果如下图:

Tip 1: Tuning your learning rates

learning rate太小,loss值下降会很慢,如图左蓝色线;learning rate比较大,loss值有可能会卡在一个地方,如图左绿色曲线,learning rate很大,loss值有可能变大,如图左红色曲线。

可以可视化learning rate与loss值的关系,如图右所示。在做Gradient Descent时候建议画出此图,可以更好的选择learning rate。

Adaptive Learning Rates

为了达到以上目的,有很多技巧,比如Adagrad。

Adagrad

此时,可能会发现一个矛盾,在做一般的Gradient Descent中,参数的update取决于两件事情,一件事情是learning rate,另一件事情是gradient。gradient越大,参数update就越快。在Adagrad中,gradient越大,分母就会越大,正好与gradient对参数update的影响相反,如图所示。

其实,Adagrad如此处理,直觉上来讲,是为了突出反差的效果。

更正式的解释是这样:

只考虑一个参数的时候,调整的best step与一次微分有关。

考虑两个参数的时候,可以看出$w_1$上的a点的微分值是比较小的,$w_2$上的c点的微分值是比较大的,但是可以明显看出,a点离最低点是比较远的,c点离最低点是比较近的。所以,考虑跨参数的时候,就不能仅仅只考虑一次微分值。

同时考虑多个参数的时候,调整的best step与一次微分和二次微分有关。Adagrad的做法是在没有额外多余的运算下估算二次微分。

Tip 2: Stochastic Gradient Descent:Make the training faster

正常的Gradient Descent,Loss是考虑所有的training example,Stochastic Gradient Descent的Loss只考虑某一个example。

从Demo中可以看出,Gradient Descent看过所有的example后update一次参数,是比较稳定的;Stochastic Gradient Descent每看到一个example后就update一次参数,是比较散乱的,但是速度是比较快的。

Tip 3: Feature Scaling

Feature Scaling是为了让特征有相同的分布。

e.g.假设$y=b+w_1x_1+w_2x_2$中$x_1$的值是比较小的(1,2……),$x_2$的值是比较大的(100,200……),对$w_1$、$w_2$的值做相同的变化,会发现$w_1$对$y$的变化是比较小的,$w_2$对$y$的变化是比较大的。因此可以画出蓝色圈圈的图, 在$w_1$方向上是比较smooth的,在$w_2$方向上是比较sharp的,这时候update参数是比较难的。经过Feature Scaling处理后,可以得到绿色圈圈的图,这时候update参数是比较容易,比较有效率的。

常用的Feature Scaling方法之一如图所示:

Formal Derivation

More Limitation of Gradient Descent

Gradient Descent可能会卡在local minima,也可能会卡在saddle point,也有可能是卡在微分值很小的plateau。

如果本博文对您有帮助,可以赞助支持一波博主~